HomeTabs.tsx 10 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201
  1. "use client";
  2. import { GroupType, PrizeTypes } from "@/api/home";
  3. import Box from "@/components/Box";
  4. import { useRouter } from "@/i18n/routing";
  5. import { useSystemStore } from "@/stores/useSystemStore";
  6. import { Toast } from "antd-mobile";
  7. import clsx from "clsx";
  8. import { useTranslations } from "next-intl";
  9. import { FC, useState } from "react";
  10. import { Swiper, SwiperSlide } from "swiper/react";
  11. import HomeGames from "./HomeGames";
  12. // import HomePrize from "./HomePrize";
  13. const buttonGroup = [
  14. {
  15. icon: "qianbao3",
  16. category_name: "sixth",
  17. isHot: false,
  18. url: "/freeGames",
  19. locale: true,
  20. lock: false,
  21. isAnimation: true,
  22. image: "/home/free.png",
  23. },
  24. {
  25. icon: "qianbao3",
  26. category_name: "seventh",
  27. isHot: false,
  28. url: "/replayGames",
  29. locale: true,
  30. lock: false,
  31. image: "/home/replay.png",
  32. },
  33. {
  34. icon: "liwulipinjiangpin",
  35. category_name: "first",
  36. isHot: true,
  37. url: "/promo",
  38. locale: true,
  39. lock: false,
  40. image: "/home/promoto.png",
  41. },
  42. // {
  43. // icon: "pro-youxi1",
  44. // category_name: "second",
  45. // isHot: false,
  46. // url: "/gameList/110",
  47. // locale: true,
  48. // lock: true,
  49. // },
  50. // {
  51. // icon: "huodongyule",
  52. // category_name: "third",
  53. // isHot: false,
  54. // url: "/sports",
  55. // locale: true,
  56. // lock: false,
  57. // },
  58. {
  59. icon: "shipin",
  60. category_name: "fourth",
  61. isHot: false,
  62. url: "/gameList?gameListFlag=10&type=1&bet_type=1&name=live",
  63. locale: true,
  64. lock: false,
  65. image: "/home/live.png",
  66. },
  67. {
  68. icon: "yingyong",
  69. category_name: "Fifth",
  70. isHot: false,
  71. url: "/download",
  72. locale: true,
  73. lock: false,
  74. image: "/home/app.png",
  75. },
  76. ] as const;
  77. type TabItemType = (typeof buttonGroup)[number] & GroupType;
  78. const TabItem = ({
  79. item,
  80. active,
  81. onClick,
  82. }: {
  83. item: TabItemType;
  84. active?: boolean;
  85. onClick?: (item: TabItemType) => void;
  86. }) => {
  87. const t = useTranslations("ButtonGroup");
  88. const router = useRouter();
  89. const handler = (item: TabItemType) => {
  90. if (!item.locale) {
  91. onClick && onClick(item);
  92. return;
  93. }
  94. if (item.lock) {
  95. Toast.show("It is under development.");
  96. } else {
  97. router.push(item.url);
  98. }
  99. };
  100. const cls = clsx("pro-iconfont text-[.34rem]", `pro-${item.icon}`);
  101. // const cls2 = clsx("iconfont text-[.34rem]", `icon-${item.icon}`);
  102. const rootCls = clsx(
  103. "relative flex flex-1 cursor-pointer items-center flex-col",
  104. active ? "text-[#d0f5fb]" : "text-[#d0f5fb]"
  105. );
  106. return (
  107. <div className={rootCls} onClick={() => handler(item)}>
  108. <div className="flex h-[.55rem] items-end justify-center">
  109. {!item.image && <span className={cls}></span>}
  110. {item.image && (
  111. <img
  112. src={item.image}
  113. width={45}
  114. height={55}
  115. alt={item.url}
  116. className={clsx(item.isAnimation ? "animate-slow-bounce" : "")}
  117. ></img>
  118. )}
  119. </div>
  120. <span className={"break-word truncate whitespace-normal text-center text-[0.13rem]"}>
  121. {item.locale ? t(item.category_name) : item.category_name}
  122. </span>
  123. {/* {item.isHot && (
  124. <img
  125. className={"absolute -top-[0.12rem] right-0 h-[0.21rem] w-[0.21rem]"}
  126. src="data:image/png;base64,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"
  127. alt=""
  128. />
  129. )} */}
  130. </div>
  131. );
  132. };
  133. interface Props {
  134. tabs: GroupType[];
  135. prize?: PrizeTypes[];
  136. }
  137. const Tabs: FC<Props> = (props) => {
  138. const { tabs, prize } = props;
  139. const { show_again_game, show_free_game } = useSystemStore((state) => {
  140. return {
  141. show_again_game: state.show_again_game,
  142. show_free_game: state.show_free_game,
  143. };
  144. });
  145. const newButtonGroup = buttonGroup.filter((item: any) => {
  146. if (item.url === "/freeGames" && show_free_game !== 1) {
  147. return false;
  148. }
  149. if (item.url === "/replayGames" && show_again_game !== 1) {
  150. return false;
  151. }
  152. return true;
  153. });
  154. const tabData = [...tabs, ...newButtonGroup];
  155. const [active, setActive] = useState<number>(0);
  156. const router = useRouter();
  157. const selectHandler = (item: TabItemType, index: number) => {
  158. if (item.bet_type === 2 || item.bet_type === 3) {
  159. router.push(
  160. `/gameList/?gameListFlag=${item.category[0].jump_id}&type=1&bet_type=${item.bet_type}`
  161. );
  162. return;
  163. }
  164. setActive(index);
  165. };
  166. const groupGames = tabs[active]?.category;
  167. return (
  168. <>
  169. <Box pt={false} className="px-[.3rem]">
  170. <Swiper slidesPerView={5} centeredSlides={true} centeredSlidesBounds>
  171. {tabData?.map((group, index) => (
  172. <SwiperSlide key={index}>
  173. <TabItem
  174. item={group as TabItemType}
  175. active={index === active}
  176. onClick={(event) => selectHandler(event, index)}
  177. ></TabItem>
  178. </SwiperSlide>
  179. ))}
  180. </Swiper>
  181. </Box>
  182. {/* <HomePrize data={prize}></HomePrize> */}
  183. <HomeGames groupGames={groupGames} />
  184. </>
  185. );
  186. };
  187. export default Tabs;